﻿
Imports System.Data.SqlClient

Public Class ParticipanteDAO

    Public Sub actualizar(ByVal modelo As Participante)
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "UPDATE PARTICIPANTE SET NOMBRE=@VALOR1, APELLIDO=@VALOR2, FECH_NAC=@VALOR3, SEXO=@VALOR4, CORREO=@VALOR5, DIRECCION=@VALOR6 WHERE idParticipante=@VALOR7"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.NombreParticipante)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.Apellido)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.Fech_nac)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.Sexo)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.Correo)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.Direccion)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.idParticipante)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("ParticipanteDAO: No actualizó")
            End If

            cn.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
            Throw New DAOExcepcion(ex.ToString)
        End Try
    End Sub

    Public Function insertar(ByVal modelo As Participante) As Participante
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO PARTICIPANTE (Nombre, Apellido, Fech_nac, Sexo, Correo, Direccion) VALUES (@VALOR1, @VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6)"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.NombreParticipante)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.Apellido)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.Fech_nac)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.Sexo)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.Correo)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.Direccion)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("ParticipanteDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idParticipante = CType(dr(0), Integer)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo

    End Function

    Public Function obtener(ByVal idParticipante As Integer) As Participante
        Dim modelo As New Participante

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT * FROM Participante WHERE idParticipante=@VALOR1"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", idParticipante)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idParticipante = dr(0).ToString
                modelo.NombreParticipante = dr(1).ToString
                modelo.Apellido = dr(2).ToString
                modelo.Fech_nac = dr(3).ToString
                modelo.Sexo = dr(4).ToString
                modelo.Correo = dr(5).ToString
                modelo.Direccion = dr(6).ToString
            End If

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

    Public Function listar() As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT * FROM Participante"
            Dim cmd As New SqlCommand(sql, cn)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            While dr.Read
                Dim modelo As New Participante
                modelo.idParticipante = dr(0).ToString
                modelo.NombreParticipante = dr(1).ToString
                modelo.Apellido = dr(2).ToString
                modelo.Fech_nac = dr(3).ToString
                modelo.Sexo = dr(4).ToString
                modelo.Correo = dr(5).ToString
                modelo.Direccion = dr(6).ToString
                lista.Add(modelo)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function

    Public Function buscarPorNombre(ByVal nombre As String) As Collection
        Dim busca As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDPARTICIPANTE, NOMBRE, APELLIDO, FECH_NAC, SEXO, CORREO, DIRECCION FROM PARTICIPANTE WHERE UPPER(NOMBRE) LIKE @VALOR1"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", "%" + nombre.ToUpper + "%")

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            While dr.Read
                Dim datos As New Participante
                datos.idParticipante = dr(0).ToString
                datos.NombreParticipante = dr(1).ToString
                datos.Apellido = dr(2).ToString
                datos.Fech_nac = dr(3).ToString
                datos.Sexo = dr(4).ToString
                datos.Correo = dr(5).ToString
                datos.Direccion = dr(6).ToString
                busca.Add(datos)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return busca
    End Function




End Class
